/* 使用“Vue Router”中的前置钩子函数“beforeEach(to,from,next)”来进行权限校验。
权限校验的用途：在路由跳转之前判断用户是否已经登录系统，已登录系统则允许用户访问
非登录页面，否则不允许用户访问非登录页面，回到登录页面 */

import router from './router'
import {getUserInfo} from './api/login'
import store from './store'

/*   to:表示即将要进入的目标路由对象
   from:表示即将要离开的路由对象
   next:它是一个方法，可以指定路由地址进行路由跳转 */
router.beforeEach((to, from, next) => {
    // 1.获取token
    // const token = localStorage.getItem('cellphone-sms-token')
    const token = store.state.user.token
    console.log('token',token)
        // 1.1 若未获取到token，用户要访问非登录页面时则不让访问，回到登录页面（即“/login”）
        if (!token) {
            if (to.path !== '/login') {
                next({path:'/login'})
            }
            else{
                // 用户请求访问登录页面
                next() // 此处无需手动传入对象，因为这个方法会自动找到{path:'/login'}
            }
        }
        // 1.2 若获取到了token
        else{
            // 1.2.1 若请求路由“/login”，那就去目标路由
            if (to.path === '/login') {
                next()
            }
            // 1.2.2 若请求的路由不是登录页面，先在本地查看是否有用户信息。如果本地没有用户信息，那就通过token去获取用户信息。如果获取到了用户信息，那么进入目标页面，否则回到登录页面请用户重新登录
            else{
                // const userInformation = localStorage.getItem('cellphone-sms-user')
                const userInformation = store.state.user.user
                console.log('用户信息',userInformation)
                if (userInformation) {
                    // 已从本地获取到了用户信息，因此直接跳转到目标路由
                    next()
                }
                else{
                    console.log('获取用户信息')
                    // 如果本地没有用户信息，就通过“token”去获取用户信息
                    /* getUserInfo(token).then(response => {
                        const be_responsed_user_data = response.data
                        if (be_responsed_user_data.flag) {
                            // 把获取到的用户信息保存到本地
                            localStorage.setItem('cellphone-sms-user',JSON.stringify(be_responsed_user_data.data))
                            next()
                        }
                        else{
                            // 未获取到用户信息，重新登录
                            next({path:'/login'})
                        }
                    }) */
                    store.dispatch('GetUserInfo').then(response => {
                        if (response.flag) {
                            next()
                        } else {
                            next({path:'/login'})
                        }
                    }).catch(error => {})
                }
            }
        }
})